﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice_20161120_2
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Введите номер задачи (1-6)");
            string choise = Console.ReadLine();
            switch (choise)
            {
                case "1":
                    Console.WriteLine("Задача 1");
                    NumberStatistic();
                    break;
                case "2":
                    Console.WriteLine("Задача 2");
                    PrintNumbersDivN();
                    break;
                case "3":
                    Console.WriteLine("Задача 3");
                    GetDigitCountOfNumber();
                    break;
                case "4":
                    Console.WriteLine("Задача 4");
                    PrintSquare();
                    break;
                case "5":
                    Console.WriteLine("Задача 5");
                    getMaxOf5();
                    break;
                case "6":
                    Console.WriteLine("Задача 6");
                    AmoebaCounter();
                    break;
                default:
                    Console.WriteLine("RTFM");
                    break;
            }
        }

        //Пользователь вводит с клавиатуры количество чисел
        //Потом Пользователь вводит с клавиатуры n чисел
        //Программа определяет количество положительных, отрицательных, нулей

        static void NumberStatistic()
        {
            int posCount = 0, negCount = 0, zeroCount = 0;
            Console.WriteLine("Введите количество вводимых чисел");
            int counter = Int32.Parse(Console.ReadLine());
            for (int i = 0; i < counter; i++)
            {
                Console.WriteLine("Введите {0} число:", i);
                int number = Int32.Parse(Console.ReadLine());
                if (number > 0)
                    posCount++;
                else if (number < 0)
                    negCount++;
                else zeroCount++;
            }
            Console.WriteLine("Всего введено {0} чисел.", counter);
            Console.WriteLine("положительных: {0}, отрицательных: {1}, нулей: {2}. ", posCount, negCount, zeroCount);
        }

        //Вывести все двухзначные (и отрицательные) числа, кратные n
        static void PrintNumbersDivN(int n = 5)
            {
            for (int i = -99; i < 100; i++)
                if (i % n == 0 && Math.Abs(i/10) > 0)
                    Console.WriteLine(i);
            }

        //Посчитать количество цифр введенного числа, максимальную и минимальную цифру
        static void GetDigitCountOfNumber()
        {
            Console.Write("Введите число: ");
            int number = Int32.Parse(Console.ReadLine());
            Console.Write("Число {0} состоит из ", number);
            number = Math.Abs(number);
            int count = 0, minDigit = 9, maxDigit = 0, digit;
            while (number > 9)
            {
                digit = number % 10;
                if (digit < minDigit) minDigit = digit;
                if (digit > maxDigit) maxDigit = digit;
                number /= 10;
                count++;
            }
            if (number < minDigit) minDigit = number;
            if (number > maxDigit) maxDigit = number;
            Console.WriteLine("{0} цифр", ++count);
            Console.WriteLine("Минимальная цифра: {0}, Максимальная цифра: {1}", minDigit, maxDigit);           
        }

        //Составьте программу, выводящую на экран квадраты чисел от 10 до 20 включительно.
        static void PrintSquare(int first = 10, int second = 20)
        {
            for (int i = first; i <= second; i++)
                Console.WriteLine(i * i);
        }

        // Пользователь вводит 5 чисел. Вывести max из введенных чисел
        static void getMaxOf5()
        {
            int max = Int32.MinValue;
            bool isFirst = true;
            
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Введите {0} число:", i+1);
                int number = Int32.Parse(Console.ReadLine());
                if (isFirst == true)
                { 
                    max = number;
                    isFirst = false;
                }
                else if (max < number)
                    max = number;
            }
            Console.WriteLine("Максимальное из введенных чисел: {0}", max);
        }

        // Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько амеб будет через 3, 6, 9, 12,..., 24 часа.

        static void AmoebaCounter()
        {
            int amoebaCounter = 1;
            Console.WriteLine("В начале была одна амёба и амёбе было скучно...");
            for (int i = 0; i < 24; )
            {
                amoebaCounter *= 2;
                i += 3;
                Console.WriteLine("Отметка {0} часов. Количество амеб {1}", i, amoebaCounter);
            }
        }

    }
}
